Лекция 2. Арифметические основы работы ЭВМ

2.1. Что такое система счисления

Система счисления — это способ представления любого числа посредством алфавита символов, называемых цифрами.

Существуют позиционные и непозиционные системы счисления.

В непозиционных системах счисления вес цифры (т. е. тот вклад, который она вносит в значение числа) не зависит от ее позиции в записи числа. Так, в римской системе счисления в числе ХХХII (тридцать два) вес цифры Х в любой позиции равен просто десяти.

В позиционных системах счисления вес каждой цифры изменяется в зависимости от ее положения (позиции) в последовательности цифр, изображающих число. Например, в числе 757.7 первая семерка означает 7 сотен, вторая — 7 единиц, а третья — 7 десятых долей единицы.

Сама же запись числа 757.7 означает сокращенную запись выражения

700 + 50 + 7 + 0,7 = 7 . 102 + 5 . 101 + 7 . 100 + 7 . 10—1 = 757,7.

Любая позиционная система счисления характеризуется своим основанием.
 

Основание позиционной системы счисления — количество различных цифр, используемых для изображения чисел в данной системе счисления.

За основание системы можно принять любое натуральное число — два, три, четыре и т.д. Следовательно, возможно бесчисленное множество позиционных систем: двоичная, троичная, четверичная и т.д. Запись чисел в каждой из систем счисления с основанием  q  означает сокращенную запись выражения

an-1 qn-1 + an-2 qn-2 + ... + a1 q1 + a0 q0 + a-1 q-1 + ... + a-m q-m,

где  ai  — цифры системы счисления;   n и m — число целых и дробных разрядов, соответственно.
Например:


2.2. Как порождаются целые числа в позиционных системах счисления

В каждой системе счисления цифры упорядочены в соответствии с их значениями: 1 больше 0, 2 больше 1 и т.д.
 

      Продвижением цифры называют замену её следующей по величине.

Продвинуть цифру 1 значит заменить её на 2, продвинуть цифру 2 значит заменить её на 3 и т.д. Продвижение старшей цифры (например, цифры 9 в десятичной системе) означает замену её на 0. В двоичной системе, использующей только две цифры — 0 и 1, продвижение 0 означает замену его на 1, а продвижение 1 — замену её на 0.

Целые числа в любой системе счисления порождаются с помощью Правила счета:
 

Для образования целого числа, следующего за любым данным целым числом, нужно продвинуть самую правую цифру числа; если какая-либо цифра после продвижения стала нулем, то нужно продвинуть цифру, стоящую слева от неё.

Применяя это правило, запишем первые десять целых чисел


2.3. Какие системы счисления используют специалисты для общения с компьютером

Кроме десятичной широко используются системы с основанием, являющимся целой степенью числа 2, а именно:

Полезно запомнить запись в этих системах счисления первых двух десятков целых чисел:
10-я 2-я 8-я 16-я
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10-я 2-я 8-я 16-я
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F
16 10000 20 10
17 10001 21 11
18 10010 22 12
19 10011 23 13

Из всех систем счисления особенно проста и поэтому интересна для технической реализации в компьютерах двоичная система счисления.


2.4. Почему люди пользуются десятичной системой, а компьютеры — двоичной

Люди предпочитают десятичную систему, вероятно, потому, что с древних времен считали по пальцам, а пальцев у людей по десять на руках и ногах. Не всегда и не везде люди пользуются десятичной системой счисления. В Китае, например, долгое время пользовались пятеричной системой счисления.

А компьютеры используют двоичную систему потому, что она имеет ряд преимуществ перед другими системами:

Недостаток двоичной системы — быстрый рост числа разрядов, необходимых для записи чисел.


2.5. Почему в компьютерах используются также восьмеричная и шестнадцатеричная системы счисления

Двоичная система, удобная для компьютеров, для человека неудобна из-за ее громоздкости и непривычной записи.

Перевод чисел из десятичной системы в двоичную и наоборот выполняет машина. Однако, чтобы профессионально использовать компьютер, следует научиться понимать слово машины. Для этого и разработаны восьмеричная и шестнадцатеричная системы.

Числа в этих системах читаются почти так же легко, как десятичные, требуют соответственно в три (восьмеричная) и в четыре (шестнадцатеричная) раза меньше разрядов, чем в двоичной системе (ведь числа 8 и 16 — соответственно, третья и четвертая степени числа 2).
 

Чтобы перевести восьмеричное (шестнадцатеричное) число в двоичную систему, нужно заменить каждую цифру восьмеричного (шестнадцатеричного) числа соответствующим трехразрядным (четырехразрядным) двоичным числом. Затем необходимо удалить крайние нули слева, а при наличии точки - и крайние нули справа.

Например:


 

Чтобы перевести двоичное число в восьмеричную (шестнадцатеричную) систему счисления нужно двигаясь от точки влево, а затем вправо, разбить двоичное число на группы по три (четыре) разряда, дополняя, при необходимости, нулями крайние левую и правую группы. Затем каждую группу из трех (четырех) разрядов следует заменить соответствующей восьмеричной (шестнадцатеричной) цифрой.

Например,


2.6. Как перевести целое число из десятичной системы в любую другую позиционную систему счисления

Чтобы перевести целое десятичное число в двоичную (восьмеричную, шестнадцатеричную) систему счисления, нужно последовательно делить с остатком ("нацело") это число, а затем получаемые частные на основание новой системы счисления до тех пор, пока частное не станет меньше основания. При переводе запись двоичного числа следует начинать со старшего значащего разряда, а заканчивать записью младшего значащего разряда.

Пример: Переведем число 75 из десятичной системы в двоичную, восьмеричную и шестнадцатеричную:

Ответ: 7510 = 1 001 0112   =  1138  =  4B16.


2.7. Как пеpевести пpавильную десятичную дpобь в любую другую позиционную систему счисления

Для перевода правильной дроби из десятичной системы счисления в двоичную (восьмеричную, шестнадцатеричную) нужно умножить исходную дробь и дробные части получающихся произведений на основание, представленное в десятичной системе. Целые части получающихся произведений дают последовательность цифр, которая является представлением дроби в двоичной (восьмеричной, шестнадцатеричной) системе счисления.

Пример. Переведем число 0,36 из десятичной системы в двоичную, восьмеричную и шестнадцатеричную:


Для чисел, имеющих как целую, так и дробную части, перевод из десятичной системы счисления в другую осуществляется отдельно для целой и дробной частей по правилам, указанным выше.


2.8. Как пеpевести число из двоичной (восьмеpичной, шестнадцатеpичной) системы в десятичную

Перевод в десятичную систему числа x, записанного в q-ичной cистеме счисления (q = 2, 8 или 16) в виде

xq = (anan-1   ...  a ,  a-1  a-2   ...   a-m)q  

сводится к вычислению значения многочлена 
 

x10 = an  qn +  an-1  qn-1   +   ...   +  a0   q0   +   a-1   q -1   +   a-2   q-2   +     ...     +   a-m   q-m    

средствами десятичной арифметики. 

Примеpы:


2.9. Сводная таблица переводов целых чисел из одной системы счисления в другую

Рассмотрим только те системы счисления, которые применяются в компьютерах — десятичную, двоичную, восьмеричную и шестнадцатеричную. Для определенности возьмем произвольное десятичное число, например 46, и для него выполним все возможные последовательные переводы из одной системы счисления в другую. Порядок переводов определим в соответствии с рисунком:

На этом рисунке использованы следующие обозначения:

Например:  означает перевод из двоичной системы в шестнадцатеричную, имеющий в таблице порядковый номер 6.
Сводная таблица переводов целых чисел
                                                                                                         Таблица 2.1.


2.10. Как производятся арифметические операции в позиционных системах счисления

Рассмотрим основные арифметические операции: сложение, вычитание, умножение и деление. Правила выполнения этих операций в десятичной системе хорошо известны — это сложение, вычитание, умножение столбиком   и  деление углом. Эти правила применимы и ко всем другим позиционным системам счисления. Только таблицами сложения и умножения надо пользоваться особыми для каждой системы.

С л о ж е н и е

Таблицы сложения легко составить, используя Правило Счета.
 
Сложение в двоичной системе

Сложение в восьмеричной системе

                 Сложение в шестнадцатиричной системе


При сложении цифры суммируются по разрядам, и если при этом возникает избыток, то он переносится влево.
 
  Пример 1. Сложим числа 15 и 6 в различных системах счисления.


     
Шестнадцатеричная: F16+616

Ответ: 15+6 = 2110 = 101012 = 258 = 1516
Проверка. Преобразуем полученные суммы к десятичному виду:
101012 = 24 + 22 + 20 = 16+4+1=21, 
258 = 2 . 81 + 5 . 80 = 16 + 5 = 21, 
1516 = 1 . 161 + 5 . 160 = 16+5 = 21. 

  Пример 2. Сложим числа 15, 7 и 3.

Шестнадцатеричная: F16+716+316

Ответ: 5+7+3 = 2510 = 110012 = 318 = 1916
Проверка:
110012 = 24 + 23 + 20 = 16+8+1=25,
318 = 3 . 81 + 1 . 80 = 24 + 1 = 25, 
1916 = 1 . 161 + 9 . 160 = 16+9 = 25. 

  Пример 3. Сложим числа 141,5 и 59,75.


 
Ответ: 141,5 + 59,75 = 201,2510 = 11001001,012 = 311,28 = C9,416
Проверка. Преобразуем полученные суммы к десятичному виду:
11001001,012 = 27 + 26 + 23 + 20 + 2-2 = 201,25
311,28 = 3 . 82 + 1 . 81 + 1 . 80 + 2 . 8-1 = 201,25
C9,416 = 12 . 161 + 9 . 160 + 4 . 16-1 = 201,25

В ы ч и т а н и е

Пример 4. Вычтем единицу из чисел 102, 108 и 1016
     
     
 
  Пример 5. Вычтем единицу из чисел 1002, 1008 и 10016.
     
     
 
  Пример 6. Вычтем число 59,75 из числа 201,25.


 
Ответ: 201,2510 - 59,7510 = 141,510 = 10001101,12 = 215,48 = 8D,816.
Проверка. Преобразуем полученные разности к десятичному виду:
10001101,12 = 27 + 23 + 22 + 20 + 2-1 = 141,5;
215,48 = 2 . 82 + 1 . 81 + 5 . 80 + 4 . 8-1 = 141,5;
8D,816 = 8 . 161 + D . 160 + 8 . 16-1 = 141,5.

У м н о ж е н и е

Выполняя умножение многозначных чисел в различных позиционных системах счисления, можно использовать обычный алгоритм перемножения чисел в столбик, но при этом результаты перемножения и сложения однозначных чисел необходимо заимствовать из соответствующих рассматриваемой системе таблиц умножения и сложения.
Умножение в двоичной системе

Умножение в восьмеричной системе

Ввиду чрезвычайной простоты таблицы умножения в двоичной системе, умножение сводится лишь к сдвигам множимого и сложениям.
 
  Пример 7. Перемножим числа 5 и 6.


Ответ: 5 . 6 = 3010 = 111102 = 368.
Проверка. Преобразуем полученные произведения к десятичному виду:
111102 = 24 + 23 + 22 + 21 = 30;
368 = 3 . 8 1 + 6 . 80 = 30.
 
  Пример 8. Перемножим числа 115 и 51.


Ответ: 115 . 51 = 586510 = 10110111010012 = 133518.
Проверка. Преобразуем полученные произведения к десятичному виду:
10110111010012 = 212 + 210 + 29 + 27 + 26 + 25 + 23 + 20 = 5865;
133518 = 1 . 84 + 3 . 83 + 3 . 82 + 5 . 81 + 1 . 80 = 5865.

Д е л е н и е

Деление в любой позиционной системе счисления производится по тем же правилам, как и деление углом в десятичной системе. В двоичной системе деление выполняется особенно просто, ведь очередная цифра частного может быть только нулем или единицей.
 
  Пример 9. Разделим число 30 на число 6.


Ответ: 30 : 6 = 510 = 1012 = 58.
 
  Пример 10. Разделим число 5865 на число 115.

Восьмеричная: 133518 :1638


Ответ: 5865 : 115 = 5110 = 1100112 = 638.
Проверка. Преобразуем полученные частные к десятичному виду:
1100112 = 25 + 24 + 21 + 20 = 51; 638 = 6 . 81 + 3 . 80 = 51.
 
  Пример 11. Разделим число 35 на число 14.

Восьмеричная: 438 : 168


Ответ: 35 : 14 = 2,510 = 10,12 = 2,48.
Проверка. Преобразуем полученные частные к десятичному виду:
10,12 = 21 + 2 -1 = 2,5;
2,48 = 2 . 80 + 4 . 8-1 = 2,5.


2.11. Как представляются в компьютере целые числа

В компьютерной технике применяются три формы записи (кодирования) целых чисел со знаком: 
прямой код,   обратный код,   дополнительный код.

Последние две формы применяются особенно широко, так как позволяют упростить конструкцию арифметико-логического устройства компьютера путем замены разнообразных арифметических операций операцией cложения.

Положительные числа в прямом, обратном и дополнительном кодах изображаются одинаково  -  двоичными кодами с цифрой 0 в знаковом разряде. Например:
 

Отрицательные числа в прямом, обратном и дополнительном кодах имеют разное изображение.

1. Прямой код. В знаковый разряд помещается цифра 1, а в разряды цифровой части числа — двоичный код его абсолютной величины. Например:
 

2. Обратный код. Получается инвертированием всех цифр двоичного кода абсолютной величины числа, включая разряд знака: нули заменяются единицами, а единицы — нулями. Например:
 

3. Дополнительный код. Получается образованием обратного кода с последующим прибавлением единицы к его младшему разряду. Например:
 

Обычно отрицательные десятичные числа при вводе в машину автоматически преобразуются в обратный или дополнительный двоичный код и в таком виде хранятся, перемещаются и участвуют в операциях. При выводе таких чисел из машины происходит обратное преобразование в отрицательные десятичные числа.


2.12. Как компьютер выполняет арифметические действия над целыми числами

Сложение и вычитание

В большинстве компьютеров операция вычитания не используется. Вместо нее производится сложение обратных или дополнительных кодов уменьшаемого и вычитаемого. Это позволяет существенно упростить конструкцию АЛУ.

Сложение обратных кодов. Здесь при сложении чисел А и В имеют место четыре основных и два особых случая:

1. А и В положительные. При суммировании складываются все разряды, включая разряд знака. Так как знаковые разряды положительных слагаемых равны нулю, разряд знака суммы тоже равен нулю. Например:
 

Получен правильный результат.

2. А положительное, B отрицательное и по абсолютной величине больше, чем А. Например:
 

Получен правильный результат в обратном коде. При переводе в прямой код биты цифровой части результата инвертируются: 1 0000111 = -710.

3. А положительное, B отрицательное и по абсолютной величине меньше, чем А. Например:


 
Компьютер исправляет полученный первоначально неправильный результат (6 вместо 7) переносом единицы из знакового разряда в младший разряд суммы.

4. А и В отрицательные. Например:
 

Полученный первоначально неправильный результат (обратный код числа -1110 вместо обратного кода числа -1010) компьютер исправляет переносом единицы из знакового разряда в младший разряд суммы. При переводе результата в прямой код биты цифровой части числа инвертируются: 1 0001010 = -1010.

При сложении может возникнуть ситуация, когда старшие разряды результата операции не помещаются в отведенной для него области памяти. Такая ситуация называется переполнением разрядной сетки формата числа. Для обнаружения переполнения и оповещения о возникшей ошибке в компьютере используются специальные средства. Ниже приведены два возможных случая переполнения.

5. А и В положительные, сумма А+В больше, либо равна 2n-1, где n — количество разрядов формата чисел (для однобайтового формата n=8, 2n-1 = 27 = 128). Например:
 

Семи разрядов цифровой части числового формата недостаточно для размещения восьмиразрядной суммы (16210 = 101000102), поэтому старший разряд суммы оказывается в знаковом разряде. Это вызывает несовпадение знака суммы и знаков слагаемых, что является свидетельством переполнения разрядной сетки.

6. А и В отрицательные, сумма абсолютных величин А и В больше, либо равна 2n-1. Например:

Здесь знак суммы тоже не совпадает со знаками слагаемых, что свидетельствует о переполнении разрядной сетки.

Сложение дополнительных кодов. Здесь также имеют место рассмотренные выше шесть случаев:

1. А и В положительные. Здесь нет отличий от случая 1, рассмотренного для обратного кода.

2. А положительное, B отрицательное и по абсолютной величине больше, чем А. Например:
 

 
Получен правильный результат в дополнительном коде. При переводе в прямой код биты цифровой части результата инвертируются и к младшему разряду прибавляется единица: 1 0000110 + 1 = 1 0000111 = -710.

3. А положительное, B отрицательное и по абсолютной величине меньше, чем А. Например:
 

Получен правильный результат. Единицу переноса из знакового разряда компьютер отбрасывает.

4. А и В отрицательные. Например:
 

Получен правильный результат в дополнительном коде. Единицу переноса из знакового разряда компьютер отбрасывает.

Случаи переполнения для дополнительных кодов рассматриваются по аналогии со случаями 5 и 6 для обратных кодов.

Сравнение рассмотренных форм кодирования целых чисел со знаком показывает:

Умножение и деление

Во многих компьютерах умножение производится как последовательность сложений и сдвигов. Для этого в АЛУ имеется регистр, называемый накапливающим сумматором, который до начала выполнения операции содержит число ноль. В процессе выполнения операции в нем поочередно размещаются множимое и результаты промежуточных сложений, а по завершении операции — окончательный результат.

Другой регистр АЛУ, участвующий в выполнении этой операции, вначале содержит множитель. Затем по мере выполнения сложений содержащееся в нем число уменьшается, пока не достигнет нулевого значения.

Для иллюстрации умножим 1100112 на 1011012.

Деление для компьютера является трудной операцией. Обычно оно реализуется путем многократного прибавления к делимому дополнительного кода делителя.


2.13. Упражнения

2.1. Используя Правило Счета, запишите первые 20 целых чисел в десятичной, двоичной, троичной, пятеричной и восьмеричной системах счисления.

2.2. Какие целые числа следуют за числами:
 
a) 12; f) 18; k) F16
b) 1012; g) 78; l) 1F16;
 c) 1112 h) 378; m) FF16;
d) 11112; i) 1778; n) 9AF916
e) 1010112; j) 77778; o) CDEF16 ?

2.3. Какие целые числа предшествуют числам:
 
a) 102; f) 108; k) 1016;
b) 10102; g) 208;  l)2016;
c) 10002; h) 1008; m) 10016;
d) 100002; i) 1108; n) A1016;
e) 101002; j) 10008; o) 100016 ?

2.4. Какой цифрой заканчивается четное двоичное число? Какой цифрой заканчивается нечетное двоичное число? Какими цифрами может заканчиваться четное троичное число?

2.5. Какое наибольшее десятичное число можно записать тремя цифрами:

2.6. В какой системе счисления 21 + 24 = 100?
Решение. Пусть x — искомое основание системы счисления. Тогда 100x = 1 · x2 + 0 · x1 + 0 · x0,    21x = 2 · x1 + 1 · x0,    24x = 2 · x1 + 4 · x0. Таким образом, x2 = 2x + 2x + 5 или x2 - 4x - 5 = 0. Положительным корнем этого квадратного уравнения является x = 5.
Ответ. Числа записаны в пятеричной системе счисления.

2.7. В какой системе счисления справедливо следующее:

2.8. Десятичное число 59 эквивалентно числу 214 в некоторой другой системе счисления. Найдите основание этой системы.

2.9. Переведите числа в десятичную систему, а затем проверьте результаты, выполнив обратные переводы:
 
a) 10110112; f) 5178; k) 1F16
b) 101101112; g) 10108 l) ABC16
c) 0111000012; h) 12348; m) 101016;
d) 0,10001102; i) 0,348; n) 0,А416;
e) 110100,112; j) 123,418; o) 1DE,C816.

2.10. Переведите числа из десятичной системы в двоичную, восьмеричную и шестнадцатеричную, а затем проверьте результаты, выполнив обратные переводы:

      а) 12510;      б) 22910;     в) 8810;      г) 37,2510;      д) 206,12510.

2.11. Переведите числа из двоичной системы в восьмеричную и шестнадцатеричную, а затем проверьте результаты, выполнив обратные переводы:
 
a) 1001111110111,01112;  d) 1011110011100,112;
b) 1110101011,10111012; e) 10111,11111011112;
c) 10111001,1011001112; f) 1100010101,110012.

2.12. Переведите в двоичную и восьмеричную системы шестнадцатеричные числа:

      a) 2СE16;     b) 9F4016;     c) ABCDE16;     d) 1010,10116;     e) 1ABC,9D16.

2.13. Выпишите целые числа:

2.14. Для десятичных чисел 47 и 79 выполните цепочку переводов из одной системы счисления в другую:

2.15. Составьте таблицы сложения однозначных чисел в троичной и пятеричной системах счисления.

2.16. Составьте таблицы умножения однозначных чисел в троичной и пятеричной системах счисления.

2.17. Сложите числа, а затем проверьте результаты, выполнив соответствующие десятичные сложения:
 
a) 10111012 и 11101112; e) 378 и 758; i) A16 и F16;
b) 1011,1012 и 101,0112; f) 1658 и 378; j) 1916 и C16;
c) 10112, 112 и 111,12; g) 7,58 и 14,68; k) A,B16 и E,F16;
d) 10112 , 11,12 и 1112; h) 68, 178 и 78; l) E16, 916 и F16.

2.18. В каких системах счисления выполнены следующие сложения? Найдите основания каждой системы:

2.19. Найдите те подстановки десятичных цифр вместо букв, которые делают правильными выписанные результаты (разные цифры замещаются разными буквами):

                        

2.20. Вычтите:
 
a) 1112 из 101002; e) 158 из 208; i) 1А16 из 3116;
b) 10,112 из 100,12; f) 478 из 1028; j) F9E16 из 2А3016;
c) 111,12 из 100102; g) 56,78 из 1018; k) D,116 из B,9216;
d) 100012 из 1110,112; h) 16,548 из 30,018; l) ABC16 из 567816.

2.21. Перемножьте числа, а затем проверьте результаты, выполнив соответствующие десятичные умножения:
 
a) 1011012 и 1012; e) 378 и 48;
b) 1111012 и 11,012; f) 168 и 78;
c) 1011,112 и 101,12; g) 7,58 и 1,68;
d) 1012 и 1111,0012; h) 6,258 и 7,128.

2.22. Разделите 100101102 на 10102 и проверьте результат, умножая делитель на частное.

2.23. Разделите 100110101002 на 11002 и затем выполните соответствующее десятичное и восьмеричное деление.

2.24. Вычислите значения выражений:

2.25. Расположите следующие числа в порядке возрастания:

2.26. Запишите уменьшающийся ряд чисел +3, +2, ..., -3 в однобайтовом формате:

2.27. Запишите числа в прямом коде (формат 1 байт):

      a) 31;      b) -63;    c) 65;    г) -128.

2.28. Запишите числа в обратном и дополнительном кодах (формат 1 байт):

      а) -9;      b) -15;     c) -127;     d) -128.

2.29. Найдите десятичные представления чисел, записанных в дополнительном коде:

      a) 1 1111000;      b) 1 0011011;     c) 1 1101001;      d) 1 0000000.

2.30. Найдите десятичные представления чисел, записанных в обратном коде:

      а) 1 1101000;      b) 1 0011111;      c) 1 0101011;      d) 1 0000000.

2.31. Выполните вычитания чисел путем сложения их обратных (дополнительных) кодов в формате 1 байт. Укажите, в каких случаях имеет место переполнение разрядной сетки:
а) 9 - 2; d) -20 - 10; g) -120 - 15;
b) 2 - 9; e) 50 - 25; h) -126 - 1;
c) -5 - 7; f) 127 - 1; i) -127 - 1.